home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_sgmllib.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  13KB  |  405 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. import pprint
  5. import sgmllib
  6. import unittest
  7. from test import test_support
  8.  
  9. class EventCollector(sgmllib.SGMLParser):
  10.     
  11.     def __init__(self):
  12.         self.events = []
  13.         self.append = self.events.append
  14.         sgmllib.SGMLParser.__init__(self)
  15.  
  16.     
  17.     def get_events(self):
  18.         L = []
  19.         prevtype = None
  20.         for event in self.events:
  21.             type = event[0]
  22.             if prevtype == prevtype:
  23.                 pass
  24.             elif prevtype == 'data':
  25.                 L[-1] = ('data', L[-1][1] + event[1])
  26.             else:
  27.                 L.append(event)
  28.             prevtype = type
  29.         
  30.         self.events = L
  31.         return L
  32.  
  33.     
  34.     def unknown_starttag(self, tag, attrs):
  35.         self.append(('starttag', tag, attrs))
  36.  
  37.     
  38.     def unknown_endtag(self, tag):
  39.         self.append(('endtag', tag))
  40.  
  41.     
  42.     def handle_comment(self, data):
  43.         self.append(('comment', data))
  44.  
  45.     
  46.     def handle_charref(self, data):
  47.         self.append(('charref', data))
  48.  
  49.     
  50.     def handle_data(self, data):
  51.         self.append(('data', data))
  52.  
  53.     
  54.     def handle_decl(self, decl):
  55.         self.append(('decl', decl))
  56.  
  57.     
  58.     def handle_entityref(self, data):
  59.         self.append(('entityref', data))
  60.  
  61.     
  62.     def handle_pi(self, data):
  63.         self.append(('pi', data))
  64.  
  65.     
  66.     def unknown_decl(self, decl):
  67.         self.append(('unknown decl', decl))
  68.  
  69.  
  70.  
  71. class CDATAEventCollector(EventCollector):
  72.     
  73.     def start_cdata(self, attrs):
  74.         self.append(('starttag', 'cdata', attrs))
  75.         self.setliteral()
  76.  
  77.  
  78.  
  79. class SGMLParserTestCase(unittest.TestCase):
  80.     collector = EventCollector
  81.     
  82.     def get_events(self, source):
  83.         parser = self.collector()
  84.         
  85.         try:
  86.             for s in source:
  87.                 parser.feed(s)
  88.             
  89.             parser.close()
  90.         except:
  91.             raise 
  92.  
  93.         return parser.get_events()
  94.  
  95.     
  96.     def check_events(self, source, expected_events):
  97.         
  98.         try:
  99.             events = self.get_events(source)
  100.         except:
  101.             import sys as sys
  102.             raise 
  103.  
  104.         if events != expected_events:
  105.             self.fail('received events did not match expected events\nExpected:\n' + pprint.pformat(expected_events) + '\nReceived:\n' + pprint.pformat(events))
  106.         
  107.  
  108.     
  109.     def check_parse_error(self, source):
  110.         parser = EventCollector()
  111.         
  112.         try:
  113.             parser.feed(source)
  114.             parser.close()
  115.         except sgmllib.SGMLParseError:
  116.             pass
  117.  
  118.         self.fail('expected SGMLParseError for %r\nReceived:\n%s' % (source, pprint.pformat(parser.get_events())))
  119.  
  120.     
  121.     def test_doctype_decl_internal(self):
  122.         inside = "DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01//EN'\n             SYSTEM 'http://www.w3.org/TR/html401/strict.dtd' [\n  <!ELEMENT html - O EMPTY>\n  <!ATTLIST html\n      version CDATA #IMPLIED\n      profile CDATA 'DublinCore'>\n  <!NOTATION datatype SYSTEM 'http://xml.python.org/notations/python-module'>\n  <!ENTITY myEntity 'internal parsed entity'>\n  <!ENTITY anEntity SYSTEM 'http://xml.python.org/entities/something.xml'>\n  <!ENTITY % paramEntity 'name|name|name'>\n  %paramEntity;\n  <!-- comment -->\n]"
  123.         self.check_events([
  124.             '<!%s>' % inside], [
  125.             ('decl', inside)])
  126.  
  127.     
  128.     def test_doctype_decl_external(self):
  129.         inside = "DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01//EN'"
  130.         self.check_events('<!%s>' % inside, [
  131.             ('decl', inside)])
  132.  
  133.     
  134.     def test_underscore_in_attrname(self):
  135.         '''Make sure attribute names with underscores are accepted'''
  136.         self.check_events('<a has_under _under>', [
  137.             ('starttag', 'a', [
  138.                 ('has_under', 'has_under'),
  139.                 ('_under', '_under')])])
  140.  
  141.     
  142.     def test_underscore_in_tagname(self):
  143.         '''Make sure tag names with underscores are accepted'''
  144.         self.check_events('<has_under></has_under>', [
  145.             ('starttag', 'has_under', []),
  146.             ('endtag', 'has_under')])
  147.  
  148.     
  149.     def test_quotes_in_unquoted_attrs(self):
  150.         '''Be sure quotes in unquoted attributes are made part of the value'''
  151.         self.check_events('<a href=foo\'bar"baz>', [
  152.             ('starttag', 'a', [
  153.                 ('href', 'foo\'bar"baz')])])
  154.  
  155.     
  156.     def test_xhtml_empty_tag(self):
  157.         '''Handling of XHTML-style empty start tags'''
  158.         self.check_events('<br />text<i></i>', [
  159.             ('starttag', 'br', []),
  160.             ('data', 'text'),
  161.             ('starttag', 'i', []),
  162.             ('endtag', 'i')])
  163.  
  164.     
  165.     def test_processing_instruction_only(self):
  166.         self.check_events('<?processing instruction>', [
  167.             ('pi', 'processing instruction')])
  168.  
  169.     
  170.     def test_bad_nesting(self):
  171.         self.check_events('<a><b></a></b>', [
  172.             ('starttag', 'a', []),
  173.             ('starttag', 'b', []),
  174.             ('endtag', 'a'),
  175.             ('endtag', 'b')])
  176.  
  177.     
  178.     def test_bare_ampersands(self):
  179.         self.check_events('this text & contains & ampersands &', [
  180.             ('data', 'this text & contains & ampersands &')])
  181.  
  182.     
  183.     def test_bare_pointy_brackets(self):
  184.         self.check_events('this < text > contains < bare>pointy< brackets', [
  185.             ('data', 'this < text > contains < bare>pointy< brackets')])
  186.  
  187.     
  188.     def test_attr_syntax(self):
  189.         output = [
  190.             ('starttag', 'a', [
  191.                 ('b', 'v'),
  192.                 ('c', 'v'),
  193.                 ('d', 'v'),
  194.                 ('e', 'e')])]
  195.         self.check_events('<a b=\'v\' c="v" d=v e>', output)
  196.         self.check_events('<a  b = \'v\' c = "v" d = v e>', output)
  197.         self.check_events('<a\nb\n=\n\'v\'\nc\n=\n"v"\nd\n=\nv\ne>', output)
  198.         self.check_events('<a\tb\t=\t\'v\'\tc\t=\t"v"\td\t=\tv\te>', output)
  199.  
  200.     
  201.     def test_attr_values(self):
  202.         self.check_events('<a b=\'xxx\n\txxx\' c="yyy\t\nyyy" d=\'\txyz\n\'>', [
  203.             ('starttag', 'a', [
  204.                 ('b', 'xxx\n\txxx'),
  205.                 ('c', 'yyy\t\nyyy'),
  206.                 ('d', '\txyz\n')])])
  207.         self.check_events('<a b=\'\' c="">', [
  208.             ('starttag', 'a', [
  209.                 ('b', ''),
  210.                 ('c', '')])])
  211.         safe = '$-_.+'
  212.         extra = "!*'(),"
  213.         reserved = ';/?:@&='
  214.         url = 'http://example.com:8080/path/to/file?%s%s%s' % (safe, extra, reserved)
  215.         self.check_events('<e a=%s>' % url, [
  216.             ('starttag', 'e', [
  217.                 ('a', url)])])
  218.         self.check_events('<e a=rgb(1,2,3)>', [
  219.             ('starttag', 'e', [
  220.                 ('a', 'rgb(1,2,3)')])])
  221.  
  222.     
  223.     def test_attr_funky_names(self):
  224.         self.check_events("<a a.b='v' c:d=v e-f=v>", [
  225.             ('starttag', 'a', [
  226.                 ('a.b', 'v'),
  227.                 ('c:d', 'v'),
  228.                 ('e-f', 'v')])])
  229.  
  230.     
  231.     def test_illegal_declarations(self):
  232.         s = 'abc<!spacer type="block" height="25">def'
  233.         self.check_events(s, [
  234.             ('data', 'abc'),
  235.             ('unknown decl', 'spacer type="block" height="25"'),
  236.             ('data', 'def')])
  237.  
  238.     
  239.     def test_weird_starttags(self):
  240.         self.check_events('<a<a>', [
  241.             ('starttag', 'a', []),
  242.             ('starttag', 'a', [])])
  243.         self.check_events('</a<a>', [
  244.             ('endtag', 'a'),
  245.             ('starttag', 'a', [])])
  246.  
  247.     
  248.     def test_declaration_junk_chars(self):
  249.         self.check_parse_error('<!DOCTYPE foo $ >')
  250.  
  251.     
  252.     def test_get_starttag_text(self):
  253.         s = '<foobar   \n   one="1"\ttwo=2   >'
  254.         self.check_events(s, [
  255.             ('starttag', 'foobar', [
  256.                 ('one', '1'),
  257.                 ('two', '2')])])
  258.  
  259.     
  260.     def test_cdata_content(self):
  261.         s = '<cdata> <!-- not a comment --> ¬-an-entity-ref; </cdata><notcdata> <!-- comment --> </notcdata>'
  262.         self.collector = CDATAEventCollector
  263.         self.check_events(s, [
  264.             ('starttag', 'cdata', []),
  265.             ('data', ' <!-- not a comment --> ¬-an-entity-ref; '),
  266.             ('endtag', 'cdata'),
  267.             ('starttag', 'notcdata', []),
  268.             ('data', ' '),
  269.             ('comment', ' comment '),
  270.             ('data', ' '),
  271.             ('endtag', 'notcdata')])
  272.         s = "<cdata> <not a='start tag'> </cdata>"
  273.         self.check_events(s, [
  274.             ('starttag', 'cdata', []),
  275.             ('data', " <not a='start tag'> "),
  276.             ('endtag', 'cdata')])
  277.  
  278.     
  279.     def test_illegal_declarations(self):
  280.         s = 'abc<!spacer type="block" height="25">def'
  281.         self.check_events(s, [
  282.             ('data', 'abc'),
  283.             ('unknown decl', 'spacer type="block" height="25"'),
  284.             ('data', 'def')])
  285.  
  286.     
  287.     def test_enumerated_attr_type(self):
  288.         s = '<!DOCTYPE doc [<!ATTLIST doc attr (a | b) >]>'
  289.         self.check_events(s, [
  290.             ('decl', 'DOCTYPE doc [<!ATTLIST doc attr (a | b) >]')])
  291.  
  292.     
  293.     def _test_starttag_end_boundary(self):
  294.         self.check_events("<a b='<'>", [
  295.             ('starttag', 'a', [
  296.                 ('b', '<')])])
  297.         self.check_events("<a b='>'>", [
  298.             ('starttag', 'a', [
  299.                 ('b', '>')])])
  300.  
  301.     
  302.     def _test_buffer_artefacts(self):
  303.         output = [
  304.             ('starttag', 'a', [
  305.                 ('b', '<')])]
  306.         self.check_events([
  307.             "<a b='<'>"], output)
  308.         self.check_events([
  309.             '<a ',
  310.             "b='<'>"], output)
  311.         self.check_events([
  312.             '<a b',
  313.             "='<'>"], output)
  314.         self.check_events([
  315.             '<a b=',
  316.             "'<'>"], output)
  317.         self.check_events([
  318.             "<a b='<",
  319.             "'>"], output)
  320.         self.check_events([
  321.             "<a b='<'",
  322.             '>'], output)
  323.         output = [
  324.             ('starttag', 'a', [
  325.                 ('b', '>')])]
  326.         self.check_events([
  327.             "<a b='>'>"], output)
  328.         self.check_events([
  329.             '<a ',
  330.             "b='>'>"], output)
  331.         self.check_events([
  332.             '<a b',
  333.             "='>'>"], output)
  334.         self.check_events([
  335.             '<a b=',
  336.             "'>'>"], output)
  337.         self.check_events([
  338.             "<a b='>",
  339.             "'>"], output)
  340.         self.check_events([
  341.             "<a b='>'",
  342.             '>'], output)
  343.         output = [
  344.             ('comment', 'abc')]
  345.         self._run_check([
  346.             '',
  347.             '<!--abc-->'], output)
  348.         self._run_check([
  349.             '<',
  350.             '!--abc-->'], output)
  351.         self._run_check([
  352.             '<!',
  353.             '--abc-->'], output)
  354.         self._run_check([
  355.             '<!-',
  356.             '-abc-->'], output)
  357.         self._run_check([
  358.             '<!--',
  359.             'abc-->'], output)
  360.         self._run_check([
  361.             '<!--a',
  362.             'bc-->'], output)
  363.         self._run_check([
  364.             '<!--ab',
  365.             'c-->'], output)
  366.         self._run_check([
  367.             '<!--abc',
  368.             '-->'], output)
  369.         self._run_check([
  370.             '<!--abc-',
  371.             '->'], output)
  372.         self._run_check([
  373.             '<!--abc--',
  374.             '>'], output)
  375.         self._run_check([
  376.             '<!--abc-->',
  377.             ''], output)
  378.  
  379.     
  380.     def _test_starttag_junk_chars(self):
  381.         self.check_parse_error('<')
  382.         self.check_parse_error('<>')
  383.         self.check_parse_error('</$>')
  384.         self.check_parse_error('</')
  385.         self.check_parse_error('</a')
  386.         self.check_parse_error('<$')
  387.         self.check_parse_error('<$>')
  388.         self.check_parse_error('<!')
  389.         self.check_parse_error('<a $>')
  390.         self.check_parse_error('<a')
  391.         self.check_parse_error("<a foo='bar'")
  392.         self.check_parse_error("<a foo='bar")
  393.         self.check_parse_error("<a foo='>'")
  394.         self.check_parse_error("<a foo='>")
  395.         self.check_parse_error('<a foo=>')
  396.  
  397.  
  398.  
  399. def test_main():
  400.     test_support.run_unittest(SGMLParserTestCase)
  401.  
  402. if __name__ == '__main__':
  403.     test_main()
  404.  
  405.